Sauvegarde Yunohost avec Restic

Table des matières

Sauvegarde Yunohost avec Restic

Description

Configuration du serveur cible

Configuration du serveur source

Vérifiez que tout fonctionne jusque-là

Script de sauvegarde

Script de planification

Restauration d’une sauvegarde

 

 

On m’a suggéré de créer un paquet sur le forum suite à cette publication, c’est chose faite!

Ce qui suit est toujours vrai mais ce sera bien plus simple d’utiliser le paquet, qui de plus intègre la planification des vérifications des dépôts.

Il est encore expérimental donc pour l’installer: yunohost app install https://github.com/YunoHost-Apps/restic_ynh.git

Pour l’installer: yunohost app install restic ou le choisir dans la liste depuis l’interface web.

 

Description

Cette procedure est une adaptation de How to backup your YunoHost server on another server. J’ai décidé d’utiliser restic au lieu de borg parce que:

L’objectif ici est de sauvegarder mon instance Yunohost quotidiennement et de tirer partie des fonctionalités de déduplication et de snapshots de restic pour garder de multiples versions de mes configurations et fichiers.

Tout au long de cette procédure, on partira du postulat suivant:

Pensez bien à adapter ces informations à votre cas dans tout ce qui va suivre

 

Vous pouvez aussi utiliser un répertoire local (sur un disque dur externe monté par exemple) et bénéficier quand même des fonctionalités de restic.

Dans ce cas vous pouvez vous passer de la configuration du serveur cible, il suffit simplement de s’assurer que le répertoire cible de la sauvegarde existe.

Vous n’aurez pas non plus besoin de configurer ssh.

Configuration du serveur cible

Sur le serveur où vous voulez envoyer vos sauvegardes:

 

On pourrait améliorer la sécurité:

  • •.En désactivant le login ssh pour le compte utilisateur mytargetuser 

  • •.En limitant la connexion de mytargetuser à une prison sftp 

Configuration du serveur source

Sur le serveur Yunohost à sauvegarder (tout ceci doit être fait en tant que root):

 

Choisissez la dernière version correspondant à votre architecture sur cette page (linux_arm64 si vous êtes sur Raspberry Pi par exemple).

 

Vous pouvez choisir n’importe quelle autre méthode d’installation, tout est

Vérifiez que tout fonctionne jusque-là

Maintenant qu’on a configuré nos serveurs source et de destination, on veut être sûr que restic sait faire des sauvegardes entre les deux.

Sur mysourceserver en tant que root:

Essai d’initialisation de dépôt sur mytargetserver depuis mysourceserver

restic -r sftp:mytargetserver:/home/backup/mysourceserver.mysourcedomain.tld/test-repository init

Restic devrait vous demander un mot de passe (mettez ce que vous voulez) et terminer sans erreur.

Script de sauvegarde

Il est temps de créer le script qui va sauvegarder l’ensemble de notre instance

Ne passez à l’étape suivante que si cette commande s’est exécutée sans erreurs.

Il peut subsiter des avertissemnts (Warning), celui-ci peut être ignoré par exemple:

Fatal: unable to open config file: Lstat: file does not exist

Is there a repository at the following location?

sftp:mytargetserver:/home/backup/mysourceserver.mysourcedomain.tld/xxxx

C’est ce que restic affiche quand on essaie d’accéder à un dépôt non initialisé.

 

Il reste quelques modifications à apporter à ce script selon moi:

  • •.Utiliser tous les paramètres passés au script ou les supprimer 

  • •.Ajuster la stratégie de nettoyage, je me suis contenté de garder celle du script original avec borg 

  • •.Comprendre l’utilisation des arguments need_mount et mount, je les ai gardés du script d’origine car je me suis dit que c’était utile mais je n’ai pas vraiment saisi comment et pourquoi les utiliser 

  • •.Lancer une vérification des sauvegardes transférées, peut-être dans un script séparé car selon les options choisies elle peut être longue et consommer beaucoup de ressources. Voir la documentation restic à ce sujet 

Script de planification

Puisqu’on sait que notre script de sauvegarde fonctionne, on peut le planifier. La première sauvegarde peut être très longue, ça dépendra du volume de données à transférer. Les sauvegardes suivantes seront beaucoup plus rapides grâce à la déduplication.

J’ai apporté quelques modifications au script d’origine:

J’ai remarqué que la sauvegarde de gitlab bloquait car elle attendait que je réponde à une question par un "y". J’ai cherché dans yunohost backup --help pour savoir comment y répondre sans succès. J’ai essayé quelques astuces avec la commande yes ou un simple echo "y" passé à la commande de backup par un pipe, même résultat. Il fallait absolument que la sauvegarde se fasse sans interaction, j’ai donc utilisé le programme expect pour répondre à la question pour moi. Ça a l’avantage d’être sûr de la question à laquelle on répond

Pour info la question est une demande de confirmation avant de prendre un peu plus d’espace disque que prévu temporairement pour faire la sauvegarde. Si vous êtes juste en place ça peut poser problème.

Voilà comment faire:

Ce script va lancer le script de sauvegarde et répondre par "y" quand on lui demandera.

Restauration d’une sauvegarde

Vous pouriez avoir envie (ou besoin) de restaurer des données d’une sauvegarde (c’est tout l’intérêt :p)

Je vous renvoie à la documentation officielle pour les détails des commandes.

Voici un simple exemple de restauration pour l’application Piwigo